package com.atguigu.gmall.product.service;

import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface ManageService {
    //获取一级分类的集合
    List<BaseCategory1> getCategory1();

    //获取 二级分类的集合/
    List<BaseCategory2> getCategory2(Long category1Id);

    //获取三级分类的集合
    List<BaseCategory3> getCategory3(Long category2Id);

    //根据分类id获取平台属性
    List<BaseAttrInfo> attrInfoList(Long category1Id, Long category2Id, Long category3Id);

    //添加平台属性
    void saveAttrInfo(BaseAttrInfo baseAttrInfo);

    //根据平台属性ID获取平台属性
    List<BaseAttrValue> getAttrValueList(Long attrId);

    //修改平台属性
    void updateAttrInfo(BaseAttrInfo baseAttrInfo);

    //查询品牌的分页
    IPage baseTrademark(Integer page, Integer limit);

    //查询商品分页(spu) 根据三级分类id
    IPage spuPage(Integer page, Long limit, Long category3Id);

    //查看品牌列表
    List<BaseTrademark> getTrademarkList();

    //查询所有销售属性
    List<BaseSaleAttr> baseSaleAttrList();

    //保存spu
    void saveSpuInfo(SpuInfo spuInfo);

    //为了添加SKU 查询spuId对应的所有图片
    List<SpuImage> spuImageList(Long spuId);

    //为了添加SKU  查询spuId 对应的销售属性及属性值集合
    List<SpuSaleAttr> spuSaleAttrList(Long spuId);

    //查询sku分页
    IPage skuPage(Integer page, Integer limit);

    //保存SKU
    void saveSkuInfo(SkuInfo skuInfo);

    //上架
    void onSale(Long skuId);

    //下架
    void canceSale(Long skuId);

    //1.根据skuId 查询库存表  通过主键   同时获取此库存的图片集合
    SkuInfo getSkuInfo(Long skuId);

    //2.获取123级分类 根据category3Id
    BaseCategoryView getBaseCategoryView(Long category3Id);

    //3. 单独查询价格 实时价格
    BigDecimal getPrice(Long skuId);

    //4.查询销售属性及其选中
    List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(Long spuId, Long skuId);

    //5.查询组合对应的SKUID 为了销售属性的选择 跳转 刷新功能
    Map getSkuValueIdsMap(Long spuId);

    //6：查询所有分类视图 集合
    List<BaseCategoryView> getBaseCategoryViewList();

    //7:获取品牌 根据ID
    BaseTrademark getBaseTrademark(Long tmId);

    //8.查询某一款商品的平台属性集合
    List<SkuAttrValue> getSkuAttrValueAndAttrAndAttrValue(Long skuId);
}
